package src.edu.wayne.cs.csc4110.hw6.interfaces;

import java.util.ArrayList;

public interface Game {
	//Session being set would happen in the constructor as it is part of the game state.
	//Rules may happen too as it is part of the particular game
	
	/**
	 * Gets a player by supplying a user name.
	 * @author Kyle Andrews
	 * @author Daniel J. Borsodi
	 * @author Bryan Lawrence Taylor
	 * @param none
	 * @return integer gameId
	 * */
	
	/**
	 * Gets all of the available pluggins
	 * @return ArrayList<Game>
	 */
	
	
	/**
	 * Used by the framework to compose the the Game Menu.
	 * @return Strings
	 */
	
	public String getGameName();
	
//	/**
//	 * sets the gameId
//	 * @param gameId
//	 */
//
//	public void setGame(Game game);
//	
//	/**
//	 * Gets a player by supplying a user name.
//	 * @author Kyle Andrews
//	 * @author Daniel J. Borsodi
//	 * @author Bryan Lawrence Taylor
//	 * @param userName The User that you are looking for.
//	 * @return <b>User</b> object if found, <b>null</b> if nothing.
//	 * */
//	
//	public User getPlayer(User user);
//	
	/**
	 * Gets the next player in the rotation.
	 * @return User
	 */
	public User getNextPlayer();
//	/**
//	 * Adds a player to the game.
//	 * @author Kyle Andrews
//	 * @author Daniel J. Borsodi
//	 * @author Bryan Lawrence Taylor
//	 * @param newPlayer The User that you are adding to the game.
//	 * @return <b>True</b> if successful, <b>False</b> otherwise.
//	 * */
//	public Boolean addPlayers(ArrayList<User> playerList);
//	/**
//	 * Removes a player from the game.
//	 * @author Kyle Andrews
//	 * @author Daniel J. Borsodi
//	 * @author Bryan Lawrence Taylor
//	 * @param userName The user name that you are looking to remove.
//	 * @return <b>True</b> if successful, <b>False</b> otherwise.
//	 * */
//	public Boolean removePlayer(String userName);
//	
	/**
	 * Send message to all players.
	 * @author Kyle Andrews
	 * @author Daniel J. Borsodi
	 * @author Bryan Lawrence Taylor
	 * @param player The player that is sending the message.
	 * @param msg The actual message that the player is trying to send.
	 * @return <b>True</b> if successful, <b>False</b> otherwise.
	 * */
	public void sendPlayerMessage(User player, String msg);
	
//	/**
//	 * Sets a player as the host of the game.
//	 * @author Kyle Andrews
//	 * @author Daniel J. Borsodi
//	 * @author Bryan Lawrence Taylor
//	 * @return The user that is the host of the game.
//	 * */
//	public User getHostPlayer();
//	/**
//	 * Replaces the host with a different player in the game.
//	 * @author Kyle Andrews
//	 * @author Daniel J. Borsodi
//	 * @author Bryan Lawrence Taylor
//	 * @param playerHost The player that is part of the game an is being made the host.
//	 * @return <b>True</b> if successful, <b>False</b> otherwise.
//	 * */
//	public Boolean setHostPlayer(User playerHost);
	
	/**
	 * method to start a game.
	 * @param PluginToFrameWorkInterface
	 */
	public void startGame(PluginToFrameWorkInterface frameWork);
	
}
